<?php
namespace app\common\lib\redis;

use Exception;
use Redis;

class Predis
{
    public $redis = "";

    private static $_instance = null;

    /**
     * 定义单例模式的变量
     *
     * @return Predis|null
     * @throws Exception
     */
    public static function getInstance()
    {
        if (empty(self::$_instance)){
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    /**
     * 创建redis
     *
     * 重写初始化入口，保证只有一处地方实例
     * Predis constructor.
     */
    private function __construct()
    {
        $this->redis = new Redis();
        $result = $this->redis->connect(config('redis.host'), config('redis.port'), config('redis.timeOut'));
        if($result === false) {
            throw new Exception('redis connect error');
        }
    }

    /**
     * 设置值
     *
     * @param $key
     * @param $value
     * @param int $time
     * @return bool|string
     */
    public function set($key,$value,$time = 0)
    {
        if(!$key){
            return '';
        }
        if(is_array($value)){
            $value = json_encode($value);
        }
        if(!$time){
            return $this->redis->set($key,$value);
        }
        return $this->redis->setex($key,$time,$value);
    }

    /**
     * 获取值
     *
     * @param $key
     * @return bool|mixed|string
     */
    public function get($key)
    {
        if(!$key){
            return '';
        }
        return $this->redis->get($key);
    }

    /**
     * @param $key
     * @return array
     */
    public function sMembers($key)
    {
        return $this->redis->sMembers($key);
    }


//    /**
//     * @param $key
//     * @param $value
//     * @return bool|int
//     */
//    public function sadd($key,$value)
//    {
//        return $this->redis->sAdd($key,$value);
//    }
//
//    /**
//     * @param $key
//     * @param $value
//     * @return int
//     */
//    public function srem($key,$value)
//    {
//        return $this->redis->sRem($key,$value);
//    }

    /**
     * 可以通过此方法构造方法
     * Prides->aa(1,2)  $name=>aa ,$arguments=》括号内的1,2
     * @param $name
     * @param $arguments
     * @return string
     */
    public function __call($name, $arguments)
    {
        // TODO: Implement __call() method.
        if(count($arguments) != 2){
            return '';
        }
        $this->redis->$name($arguments[0],$arguments[1]);
    }
}